package chapter1_11_threadlocal;

/**
 * 每个线程对其进行访问的时候
 * 访问的是自己线程的变量
 *
 * ThreadLocal 是JDK 包提供的，它提供了线程本地变量，也就是如果你创建了一个
 * ThreadLocal 变量，那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多
 * 个线程操作这个变量时，实际操作的是自己本地内存里面的变量，从而避免了线程安全问
 * 题
 * @author huayuhao
 * @date 2020/12/16 13:47
 */
public class ThreadLocalTest {

    static ThreadLocal<String> localVariable = new ThreadLocal<>();

    static void print(String str){
        // 打印当前线程本地内存threadlocal中的值
        System.out.println(str + " : " + localVariable.get());
        // 移除
        //localVariable.remove();
    }

    public static void main(String[] args) {

        Thread threadA  = new Thread(()->{
            localVariable.set("A set value");
            print("threadA");
            System.out.println("threadA remove after : " + localVariable.get() );
        });

        Thread threadB  = new Thread(()->{
            localVariable.set("B set value");
            print("threadB");
            System.out.println("threadB remove after : " + localVariable.get() );
        });

        threadA.start();
        threadB.start();

    }

}
